package com.kaifamiao.wendao.service;

import com.kaifamiao.wendao.entity.Topic;
import com.kaifamiao.wendao.mapper.TopicMapper;
import com.kaifamiao.wendao.utils.MyBatisHelper;
import org.apache.ibatis.session.SqlSession;

import java.time.LocalDateTime;
import java.util.List;

public class TopicService {

    private SqlSession session ;
    private TopicMapper topicMapper ;

    public void prepare(){
        session = MyBatisHelper.open();
        topicMapper = session.getMapper( TopicMapper.class );
    }

    public boolean save( Topic t ) {
        prepare();
        // 以当前系统时间为发布时间
        t.setPublishTime( LocalDateTime.now() );
        int count = topicMapper.save( t );
        session.commit();
        return count == 1 ;
    }

    /**
     * 根据每页显示的记录数目统计总页数
     * @param pageSize 每页显示的记录数目
     * @return 返回总页数
     */
    public int countPages( int pageSize ) {
        prepare();
        // 总计总记录数(即数据库中的话题个数)
        int count = topicMapper.count();
        // 计算并返回总页数
        return count / pageSize + ( count % pageSize == 0 ? 0 : 1 ) ;
    }

    /**
     * 实现分页查询
     * @param current 表示当前需要显示第几页
     * @param pageSize 表示每页显示的记录数目
     * @return 返回指定分页需要显示的话题列表
     */
    public List<Topic> paging(int current , int pageSize ) {
        // 预备 session 和 mapper [将来在 Spring 中不必显式控制 ]
        prepare();
        // 确定指定分页需要显示的记录是从哪里开始的
        int start = ( current - 1 ) * pageSize ;
        // 根据起始位置和每页显示的记录数查询话题列表
        List<Topic> list = topicMapper.paging( start , pageSize );
        // 关闭 session [将来在 Spring 中不必显式控制 ]
        session.close();
        return list ;
    }

    /**
     * 根据话题的主键查询话题详情
     * @param id 被查询话题的主键值
     * @return 返回相应话题的详细信息
     */
    public Topic load( Integer id ) {
        prepare();
        // 根据话题的主键查询话题详情(包含话题内容、发布者、评论信息)
        Topic t = topicMapper.find( id );
        session.close();
        return t ;
    }
}
